package sii.processors;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import sii.commons.ConfigException;
import sii.commons.Log;
import sii.commons.RatingItem;
import sii.dati.DataManagerException;
import sii.dati.DataManagerPredizione;
import sii.predizioni.PredizioneSignificanceWeighting;

public class ProcessorPredizioni {
    private static Log log;
    
    public static void eval(String inputFileName,String outputFileName) throws IOException, ConfigException, DataManagerException{
	log = new Log(ProcessorPredizioni.class);
	BufferedReader br = new BufferedReader(new FileReader(inputFileName));
	BufferedWriter bw = new BufferedWriter(new FileWriter(outputFileName));
	DataManagerPredizione dmp = DataManagerPredizione.getInstance(outputFileName);
	String line;
	PredizioneSignificanceWeighting psw = new PredizioneSignificanceWeighting();
	log.info("Avvio calcolo predizioni:");
	long i = 0;
	while((line=br.readLine()) != null){
	    i++;
	    String[] args = line.split(",");
	    int userid = Integer.valueOf(args[0]);
	    int profileid = Integer.valueOf(args[1]);
	    try{
		int predizione = psw.calcolaPredizione(userid, profileid);
		RatingItem ri = new RatingItem();
		ri.ProfileId = profileid;
		ri.Rating = predizione;
		ri.UserId = userid;
		bw.append(userid+","+profileid+","+predizione+"\n");
		if (i%50==0)	    
		    bw.flush();
		//dmp.storPredizione(ri);
	    }catch(Exception e){
		log.error("Erorre durante il calcolo della predizione " + userid + "," + profileid, e);
	    }
	    
	}
	bw.flush();
    }
}
